热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

结尾|多种_ElasticSearch的使用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了ElasticSearch的使用相关的知识,希望对你有一定的参考价值。一、安装ElasticSearch

篇首语:本文由编程笔记#小编为大家整理,主要介绍了ElasticSearch的使用相关的知识,希望对你有一定的参考价值。



一、安装ElasticSearch

下载连接:https://www.elastic.co/cn/elasticsearch/
之后解压文件,通过命令cd到bin目录下,输入elasticsearch.bat,启动服务

之后在浏览器中输入http://localhost:9200,当看到以下信息说明服务启动成功


"name" : "DESKTOP-1IK0UC3",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "fhhG4xtCT0mZ6ogsze66zA",
"version" :
"number" : "7.14.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "6bc13727ce758c0e943c3c21653b3da82f627f75",
"build_date" : "2021-09-15T10:18:09.722761972Z",
"build_snapshot" : false,
"lucene_version" : "8.9.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
,
"tagline" : "You Know, for Search"

需要注意的是elasticsearch是java编写的所以运行需要jdk的环境,elasticsearch目录下有一个jdk的文件夹,如果没有是需要自己配置jdk的环境。


二、Kibana

为了方便学习使用这里推荐使用Kibana,在对应的官网上找到Kibana选项然后下载Kibana,Kibana与elasticsearch的版本要对应上
同样的操作,进入到bin文件夹内执行kibana.bat,一般Kibanna默认的端口号是5601
通过浏览器输入http://localhost:5601/,会进入到一个图形界面选择菜单栏里的
Dev Tools


三、创建

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

//通过post方式直接创建数据
//创建索引为shopping的数据
POST /shopping/_doc

"title":"手机",
"name":"华为mate40",
"images":"http://www.xxx.com/xx.jpg",
"price":7999.00

//elasticsearch返回

"_index" : "shopping",
"_type" : "_doc",
"_id" : "AdU3aIABsHOWi0z2JXR6",//此id为elasticSearch生成的
"_version" : 1,
"result" : "created",
"_shards" :
"total" : 2,
"successful" : 1,
"failed" : 0
,
"_seq_no" : 10,
"_primary_term" : 2

不使用elasticsearch生成的id,需要自行指定id

//里面的3就是指定的id
POST /shopping/_doc/3

"title":"数码产品",
"name":"金士顿32GU盘",
"images":"http://www.xxx.com/xx.jpg",
"price":45.00

//返回的数据

"_index" : "shopping",
"_type" : "_doc",
"_id" : "3",
"_version" : 1,
"result" : "created",
"_shards" :
"total" : 2,
"successful" : 1,
"failed" : 0
,
"_seq_no" : 11,
"_primary_term" : 2

当然指定了id也可以使用put方式过程类似


四、更新

1.覆盖更新(此方式不太推荐用于更新)
例如:修改id为10的内容

PUT /shopping/_doc/10

"title":"生鲜水果",
"name":"苹果",
"images":"http://www.xxx.com/xx.jpg",
"price":10.00

2.局部更新(一般的更新只会更新某些字段的内容,所以更新采用局部更新的方式比较合适)
例如更新id为10中name的内容

POST /shopping/_update/10

"doc":
"name":"芒果"



五、删除数据

例如删除id为2的数据

DELETE /shopping/_doc/2

六、查询

查讯采用GET的方式
1.查询索引的全部数据
通过GET方式索引名称,_search

GET /shopping/_search

2.基于id查询,例如查询id为3的数据

GET /shopping/_doc/3

3.条件查询
(1)、match方式



match查询属于全文查询,在查询时,ES会先分析查询字符串,然后根据分词构建查询。


例如查询title为"红米"的数据

GET /shopping/_search

"query":
"match":
"title":"红米"



查询结果

"hits" : [

"_index" : "shopping",
"_type" : "_doc",
"_id" : "2",
"_score" : 2.3367887,
"_source" :
"title" : "红米手机",
"category" : "红米",
"images" : "http://www.xiaomi.com/xm.jpg",
"price" : 1999.0

,

"_index" : "shopping",
"_type" : "_doc",
"_id" : "10",
"_score" : 1.7820551,
"_source" :
"title" : "红米电视",
"name" : "红米max11",
"images" : "http://www.xxx.com/xx.jpg",
"price" : 3999.0

,

"_index" : "shopping",
"_type" : "_doc",
"_id" : "0kq9VYABBlS6ycwT5aie",
"_score" : 1.3246095,
"_source" :
"title" : "小米手机",
"category" : "小米",
"images" : "http://www.xiaomi.com/xm.jpg",
"price" : 3099.0

,

"_index" : "shopping",
"_type" : "_doc",
"_id" : "AdU3aIABsHOWi0z2JXR6",
"_score" : 0.70679253,
"_source" :
"title" : "手机",
"name" : "华为mate40",
"images" : "http://www.xxx.com/xx.jpg",
"price" : 7999.0


]

(2)、match_phrase方式



match_phrase在查询时也会先分析查询字符串,然后对这些词项进行搜索,不同的是match_phrase查询只会保留包含全部查询字符串的文档


GET /shopping/_search

"query":
"match_phrase":
"title":"红米手机"



查询结果

"hits" : [

"_index" : "shopping",
"_type" : "_doc",
"_id" : "00q_VYABBlS6ycwTPKiV",
"_score" : 2.3367884,
"_source" :
"title" : "红米手机",
"category" : "红米",
"images" : "http://www.xiaomi.com/xm.jpg",
"price" : 1999.0


]

(3)、bool方式



1.must等同于and
2.must_not等同于NOT
3.should等同于OR
4.filter过滤


must的应用
例如有两行数据,查询价格为45,标题是"数码产品"的数据

[

"title" : "护肤产品",
"name" : "洗面奶",
"images" : "http://www.xxx.com/xx.jpg",
"price" : 45.0
,

"title" : "数码产品",
"name" : "金士顿32GU盘",
"images" : "http://www.xxx.com/xx.jpg",
"price" : 45.0

]

查询语法

GET /shopping/_search

"query":
"bool":
"must":[

"term":
"price":45

,

"match_phrase":
"title":"数码产品"


]



查询结果

"hits" : [

"_index" : "shopping",
"_type" : "_doc",
"_id" : "3",
"_score" : 7.725004,
"_source" :
"title" : "数码产品",
"name" : "金士顿32GU盘",
"images" : "http://www.xxx.com/xx.jpg",
"price" : 45.0


]

另外两种:must_not、should语法是类似的就不再这里展开了

query context:会对搜索进行相关性算分值,
而filter context :不需要相关性算分,能够利用缓存来获得更好的性能
例如



must查询会有一个:“max_score” : 7.725004,
而换成filter:“max_score” : 0.0


filter
(4)、范围查询



range范围查询支持多种范围类型
1.数值类型
2.日期类型(timestamp)
3.ip地址类型




range的表达式
gt:大于
lt:小于
gte:大于等于
lte:小于等于
例如查询价格大于1999小于5000的商品


GET /shopping/_search

"query":
"range":
"price":
"gt": 1999,
"lt": 5000




range也是可以搭配bool,和filter一块使用,来满足不同的查询需求。


七、分页



from:是启始位置
size:是需要查询的行数


例如全查询标题为"手机",价格大于1999小于5000的商品,并分页(由于我没有填充太多数据这里按每页一行)。

GET /shopping/_search

"query":
"bool":
"must": [

"match":
"title":"手机"


],
"filter":
"range":
"price":
"gt": 1999,
"lt": 5000





,
"from":0,
"size":1

输出结果


"took" : 0,
"timed_out" : false,
"_shards" :
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
,
"hits" :
"total" :
"value" : 2, //总数据量
"relation" : "eq"
,
"max_score" : 0.83024156,
"hits" : [

"_index" : "shopping",
"_type" : "_doc",
"_id" : "4",
"_score" : 0.83024156,
"_source" :
"title" : "vivo手机",
"category" : "vivo",
"images" : "http://www.xiaomi.com/xm.jpg",
"price" : 4999.0


]


八、查询需要的字段内容



_source:指定字段返回


GET /shopping/_search

"query":
"match_phrase":
"title": "数码产品"

,
"_source":["name","price"]

输出结果

"hits" : [

"_index" : "shopping",
"_type" : "_doc",
"_id" : "3",
"_score" : 6.725004,
"_source" :
"price" : 45.0,
"name" : "金士顿32GU盘"


]

九、排序



sort:排序
order:asc正序,desc逆序


按照分值逆序_score

GET /shopping/_search

"query":
"match":
"title": "手机"

,
"sort":
"_score":
"order":"desc"



输出结果

"hits" : [

"_index" : "shopping",
"_type" : "_doc",
"_id" : "AdU3aIABsHOWi0z2JXR6",
"_score" : 0.943285,
"_source" :
"title" : "手机",
"name" : "华为mate40",
"images" : "http://www.xxx.com/xx.jpg",
"price" : 7999.0

,

"_index" : "shopping",
"_type" : "_doc",
"_id" : "4",
"_score" : 0.83024156,
"_source" :
"title" : "vivo手机",
"category" : "vivo",
"images" : "http://www.xiaomi.com/xm.jpg",
"price" : 4999.0


]

十、搜索内容高亮



给搜索的字段加粗
通过highlight指定字段
pre_tags:开头
post_tags:结尾


GET /shopping/_search

"query":
"match":
"title": "手机"

,
"highlight":
"fields":
"title":
"pre_tags": [
""
],
"post_tags": [
"
"
]




输出结果

"hits" : [

"_index" : "shopping",
"_type" : "_doc",
"_id" : "AdU3aIABsHOWi0z2JXR6",
"_score" : 0.943285,
"_source" :
"title" : "手机",
"name" : "华为mate40",
"images" : "http://www.xxx.com/xx.jpg",
"price" : 7999.0
,
"highlight" :
"title" : [
""
]

,

"_index" : "shopping",
"_type" : "_doc",
"_id" : "4",
"_score" : 0.83024156,
"_source" :
"title" : "vivo手机",
"category" : "vivo",
"images" : "http://www.xiaomi.com/xm.jpg",
"price" : 4999.0
,
"highlight" :
"title" : [
"vivo"
]


]

扩展:对于全文搜索可能还需要加入IK分词器插件。


推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • JS实现一键分享功能
    本文介绍了如何使用JS实现一键分享功能,并提供了2019独角兽企业招聘Python工程师的标准。同时,给出了分享到QQ空间、新浪微博和人人网的链接。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 1.dd命令dd命令的全称为diskdump,对系统所有用户开放。该命令用于复制磁盘的数据块,且可在复制文件的同时指定转换的文件格式。命令选项参数说明ifFILE:输入文件名称,默 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有